define(["../common"], function() {
	
	var verifyTypes = ["MOBILE", "EMAIL", "QUESTION"];
	var questionTmp = $("<div>").append($("#verify_2").children(":eq(1),:eq(2)")).html();
	var accFormCfg = {
		fields: {
			account: "账户名:required",
			captcha: "验证码:required;remote[" + g_domain + "/captcha/check]"
		}
	}
	var capFormCfg = {
		fields: {
			captcha: "验证码:required;digits;length[~6]"
		}
	};
	var pwdFormCfg = {
		fields: {
			pwd: "新密码:required;password",
			pwd2: "确认密码:required;match(pwd)"
		}
	};
	
	// 去除自动填充
	$("input[type=text]").val("");

	requirePlugin(["validator"], function() {
		// 账户名
		$("#step_0").validator(accFormCfg);
		// 手机/邮箱
		$("#verify_0, #verify_1").validator(capFormCfg);
		// ...安全问题在html
		// 重设密码
		$("#step_3").validator(pwdFormCfg);
	});
	
	// 扩展jq
	$.fn.extend({
		// 倒计时
		remainTime: function(remainTime) {
			var $this = $(this);
			var key = $this.id();
			var timeIndex = $this.data(key);
			clearTimeout(timeIndex);
			
			if (!remainTime) {
				remainTime = parseInt(Common.getSessionStorage(key));
				if (!remainTime) {
					remainTime = 0;
				}
			}
			if (remainTime == 0) {
				$this.removeClass("disabled").html("获取验证码");
				$this.unlock();
				return;
			}
			$this.addClass("disabled").html(remainTime);
			$this.lock();
			remainTime--;
			Common.setSessionStorage(key, remainTime);
			timeIndex = setTimeout(function() {
				$this.remainTime(remainTime);
			}, 1000);
			$this.data(key, timeIndex);
			
		}
	});
	
	// 初始化发送按钮状态
	$("[id^=btn_send_]").remainTime();
	
	// 账户名提交
	$("#step_0").on('valid.form', function(e, form){
		var $form = $(form);
		if (!$form.lock()) {
			return;
		}
		$form.loadMsg("请稍候...");
		$.post(g_domain + "/forgetPwd/checkNameDo/json",$form.serialize(), function(data){
			if (data.status !== 0) {
				$form.failMsg(data.message);
				return;
			} 
			$form.hideMsg();
			
			var member = data.result;
			
			// 显示下一步内容
			$("[id^=step_]").hide();
			$(".step:eq(1)").addClass("active");
			
			// 无法进行三种验证方式中的任何一种
			if (!member.mobile && !member.email && (!member.securityQuestions || member.securityQuestions.length == 0)) {
				$("#step_1").show();
				return;
			}			
			$("#step_2").show();			
			
			// 显示可用验证方式
			if (member.mobile) {
				$("#verifyType_0").parent().removeClass("disabled");
			}
			if (member.email) {
				$("#verifyType_1").parent().removeClass("disabled");
			}
			if (member.securityQuestions && member.securityQuestions.length > 0) {
				$("#verifyType_2").parent().removeClass("disabled");
			}
			
			$("#mobile").html(member.mobile);
			$("#email").html(member.email);
			var sqList = member.securityQuestions;
			var sq, html;
			for (var i in sqList) {
				sq = sqList[i];
				html = questionTmp
					.parseData(sq)
					.parse("i", i)
					.parse("num", parseInt(i) + 1);
				$("#verify_2").children(":last").before(html);
			}
			
			// 选中其中一个
			$("#step_2>ul>li").not(".disabled").eq(0).children().click();
		});
	});
	
	
	// 各种验证提交
	$("[id^=verify_]").on('valid.form', function(e, form) {
		var $form = $(form);
		if (!$form.lock()) {
			return;
		}
		var type = verifyTypes[$form.id(1)];
		$form.loadMsg("请稍候...");
		$.post(g_domain + "/forgetPwd/verifyDo/json?type=" + type, $form.serialize(), function(data){
			if (data.status !== 0) {
				$form.failMsg(data.message);
				return;
			} 
			$form.hideMsg();
			
			// 显示下一步内容
			$("[id^=step_]").hide();
			$(".step:eq(2)").addClass("active");
			$("#step_3").show();	
			$("#pwd").focus();
		});
	});
	
	// 提交密码
	$("#step_3").on('valid.form', function(e, form) {
		var $form = $(form);
		if (!$form.lock()) {
			return;
		}
		$form.loadMsg("请稍候...");
		$.post(g_domain + "/forgetPwd/pwdDo/json", $form.serialize(), function(data){
			if (data.status !== 0) {
				$form.failMsg(data.message);
				return;
			} 
			$form.infoMsg("密码设置成功");
			
			// 显示下一步内容
			$("[id^=step_]").hide();
			$(".step:eq(3)").addClass("active");
			$("#step_4").show();	
			
		});
	});
	
	
	// 事件：获取验证码
	$("[id^=btn_send_]").click(function() {
		var $this = $(this);
		if (!$this.lock()) {
			return;
		}
		var type = verifyTypes[$this.id(2)];
		$this.loadMsg("请稍候...");
		$.post(g_domain + "/forgetPwd/sendDo/json?r=" + Math.random(), {type: type}, function(data) {
			if (data.status != 0) {
				$this.failMsg(data.message);
				$this.remainTime();
				return;
			}
			$this.infoMsg("验证码已发送，请查收");
			
			// 重发倒计时
			$this.remainTime(data.result/1000);
		});
	});
	
	// 下一步/完成
	$("[id^=btn_step_]").click(function() {
		$(this).parents("form").trigger('validate');
		return false;
	});
	
	// 选择验证方式
	$("[id^=verifyType_]").click(function() {
		// 禁用的点击无效
		if ($(this).parent().is(".disabled")) {
			return false;
		}
		// 置为“选中”状态
		$("[id^=verifyType_]").parent().removeClass("active");
		$(this).parent().addClass("active");
		// 显示相应的表单
		$("[id^=verify_]").hide();
		var type = $(this).id(1);
		$("#verify_" + type).show();
		return false;
	});
	
});